import com.wn.demo01.User;
import com.wn.domain.Person;
import org.junit.jupiter.api.Test;

import java.util.Arrays;
import java.util.List;

/**
 * @author yellow Docter
 * @date 2022 -10-28
 * @desc
 *  流的中间操作:
        map(Function f)      		接收一个函数作为参数，该函数会被应用到每个元素上，并将其映射成一个新的元素。
        mapToInt(ToIntFunction f) 接收一个函数作为参数，该函数会被应用到每个元素上，产生一个新的 IntStream。


    方法           			描述
    sorted()        		产生一个新流，其中按自然顺序排序
    sorted(Comparator comp)	产生一个新流，其中按比较器顺序排序

 */
public class Demo03 {

    List<Person> persons = Arrays.asList(
            new Person("马云", 48, 2000d),
            new Person("马化腾", 50, 3000d),
            new Person("雷军", 46, 4000d),
            new Person("刘强东", 47, 5000d),
            new Person("张朝阳", 50, 6000d),
            new Person("张朝阳", 50, 6000d),
            new Person("张一鸣", 50, 7000d),
            new Person("张一鸣", 50, 7000d)
    );

    //
    @Test
    public void demo01(){
        //
        persons.stream()               //获取流
                .distinct()            //去重
                .map(u->u.getName())   //把 person 转成 一个字符串
                .forEach(s -> System.out.println("s = " + s));  //终止操作

        persons.stream()               //获取流
                .distinct()            //去重
                .mapToDouble(u->u.getSalary())   //把 person 转成 一个字符串
                .forEach(s -> System.out.println("s = " + s));  //终止操作
    }

    @Test
    public void demo02(){

//        persons.stream()               //获取流
//                .distinct()            //去重
//                .map(u->u.getSalary())
//                .sorted().forEach(s-> System.out.println("s = " + s));

        persons.stream().sorted((o1,o2)->{
            return (int) (o1.getSalary()-o2.getSalary());
        }).forEach(s-> System.out.println("s = " + s));

    }

}
